/*! WebUploader 0.1.5 */


/**
 * @fileOverview 让内部各个部件的代码可以用
 * [amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。
 *
 * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。
 */
(function (root, factory) {
    var modules = {},

        // 内部require, 简单不完全实现。
        // https://github.com/amdjs/amdjs-api/wiki/require
        _require = function (deps, callback) {
            var args, len, i;

            // 如果deps不是数组，则直接返回指定module
            if (typeof deps === 'string') {
                return getModule(deps);
            } else {
                args = [];
                for (len = deps.length, i = 0; i < len; i++) {
                    args.push(getModule(deps[i]));
                }

                return callback.apply(null, args);
            }
        },

        // 内部define，暂时不支持不指定id.
        _define = function (id, deps, factory) {
            if (arguments.length === 2) {
                factory = deps;
                deps = null;
            }

            _require(deps || [], function () {
                setModule(id, factory, arguments);
            });
        },

        // 设置module, 兼容CommonJs写法。
        setModule = function (id, factory, args) {
            var module = {
                    exports: factory
                },
                returned;

            if (typeof factory === 'function') {

                args.length || (args = [_require, module.exports, module]);
                returned = factory.apply(null, args);
                returned !== undefined && (module.exports = returned);

            }

            modules[id] = module.exports;
        },

        // 根据id获取module
        getModule = function (id) {
            var module = modules[id] || root[id];

            if (!module) {
                throw new Error('`' + id + '` is undefined');
            }

            return module;
        },

        // 将所有modules，将路径ids装换成对象。
        exportsTo = function (obj) {
            var key, host, parts, part, last, ucFirst;

            // make the first character upper case.
            ucFirst = function (str) {
                return str && (str.charAt(0).toUpperCase() + str.substr(1));
            };
            for (key in modules) {
                host = obj;


                if (!modules.hasOwnProperty(key)) {
                    continue;
                }
                parts = key.split('/');
                last = ucFirst(parts.pop());

                while ((part = ucFirst(parts.shift()))) {
                    host[part] = host[part] || {};
                    host = host[part];
                }
                host[last] = modules[key];
            }

            return obj;
        },

        makeExport = function (dollar) {
            root.__dollar = dollar;

            // exports every module.
            return exportsTo(factory(root, _define, _require));
        },

        origin;

    if (typeof module === 'object' && typeof module.exports === 'object') {

        // For CommonJS and CommonJS-like environments where a proper window is present,
        module.exports = makeExport();
    } else if (typeof define === 'function' && define.amd) {

        // Allow using this built library as an AMD module
        // in another project. That other project will only
        // see this AMD call, not the internal modules in
        // the closure below.
        define(['jquery'], makeExport);
    } else {


        // Browser globals case. Just assign the
        // result to a property on the global.
        origin = root.TestWebUploader;


        try {
            root.TestWebUploader = makeExport();
        } catch (e) {
            alert(e);
        }

        root.TestWebUploader.noConflict = function () {
            root.TestWebUploader = origin;
        };

        alert("root + " + root.TestWebUploader.toString());
    }
})(window, function (window, define, require) {
    /**
     * @fileOverview jQuery or Zepto
     */
    define('dollar-third', [], function () {
        var $ = window.__dollar || window.jQuery || window.Zepto;

        if (!$) {
            throw new Error('jQuery or Zepto not found!');
        }

        return $;
    });

    define('uploader1', [], function () {

        function Uploader1() {

        }

        Uploader1.options = {};

        Uploader1.testfun = function (x, y) {
            alert(x + y);
        }

        return Uploader1;


    });


    define('hello', [], function () {

        function Hello() {

        }

        Hello.options = {};

        Hello.testfun = function (x, y) {
            alert(" HelloYou");
            alert(x + y);
        }

        return Hello;


    });

    define('mytest', ['hello'], function (Hello) {

        Hello.testfun(20, 20);

        function Mytest() {


        }

        Mytest.options = {};

        Mytest.sum = function (x, y) {
            alert(" mytest");
            alert(x + y);
        }

        return Mytest;


    });
    return require('hello');
});
